import base64
import hashlib
import json
import random
import threading
import time
import uuid
from urllib.parse import urlparse, parse_qs

from util.mylog import my_logger


def get_query_params(link: str):
    # 使用 urlparse 解析 URL
    parsed_url = urlparse(link)
    # 使用 parse_qs 解析查询参数
    query_params = parse_qs(parsed_url.query)
    return query_params

def get_path_params(link: str)->list:
    # 使用 urlparse 解析 URL
    parsed_url = urlparse(link)
    path_segments = parsed_url.path.split('/')
    return path_segments


def random_sleep_thread(thread_name = None, min_sleep = 1, max_sleep = 8):
    """
    线程函数：在线程中执行随机时间的睡眠。

    :param thread_name: 线程名称
    :param min_sleep: 最小睡眠时间（秒）
    :param max_sleep: 最大睡眠时间（秒）
    """
    # 生成一个介于min_sleep和max_sleep之间的随机睡眠时间
    if thread_name is None:
        thread_name = threading.current_thread().name
    sleep_time = random.uniform(min_sleep, max_sleep)
    my_logger.info(f"{thread_name} 将要睡眠 {sleep_time:.2f} 秒")
    # 线程休眠指定的时间
    time.sleep(sleep_time)

def decode_base64(res_data: str, tk: str)-> list[dict] | None:
    data = base64.b64decode(res_data).decode("utf-8")
    a = ""
    try:
        a = data.replace(tk, "")
        data_dict = json.loads(a)
        return data_dict
    except Exception as e:
        my_logger.error(e)
        my_logger.error(tk)
        my_logger.error(res_data)
        my_logger.error(a)
        return None

def get_hash_value(string: str) -> str:
    # 创建一个md5哈希对象
    hash_object = hashlib.md5()
    # 更新哈希对象，传入bytes类型的数据
    hash_object.update(string.encode())
    # 获取加密后的字符串，通常以16进制表示
    encrypted_string = hash_object.hexdigest()
    return encrypted_string
def generate_uuid():
    unique_id = uuid.uuid4()
    return unique_id.hex


def set_obj_num(n):
    """生成长度为n的随机数字字符串"""
    return ''.join([str(random.randint(0, 9)) for _ in range(n)])

def nscaler(a):
    """根据特定规则转换输入的数字字符串"""
    conversion = {
        '0': '0', '1': '2', '2': '5', '3': '8',
        '4': '6', '5': '1', '6': '3', '7': '4',
        '8': '9', '9': '7'
    }
    return ''.join([conversion[char] for char in a])

def recode(a, b):
    """按照特定逻辑处理输入并返回结果"""
    n = nscaler(a)
    c = set_obj_num(len(a))
    d = set_obj_num(len(a))
    # 将n和d从字符串转换为整数进行相加，然后再转回字符串
    n = str(int(n) + int(d))
    b = nscaler(str(b))
    return f"{c}-{n}-{d}-{b}"

if __name__ == '__main__':
    print(generate_uuid())